/* * Copyright 2014-15 Skynav, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY SKYNAV, INC. AND ITS CONTRIBUTORS “AS IS” AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL SKYNAV, INC. OR ITS CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.skynav.ttpe.fonts; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.sax.SAXSource; import org.w3c.dom.Document; import org.xml.sax.InputSource; import com.skynav.ttv.util.IOUtil; import com.skynav.ttv.util.Reporter; public class FontLoader { private FontLoader() { } public static List<FontSpecification> load(List<File> fontSpecificationFiles, Reporter reporter) { List<FontSpecification> fontSpecifications = new java.util.ArrayList<FontSpecification>(); for (File f : fontSpecificationFiles) { fontSpecifications.addAll(load(f, reporter)); } return fontSpecifications; } private static List<FontSpecification> noFontSpecifications = new java.util.ArrayList<FontSpecification>(); private static List<FontSpecification> load(File f, Reporter reporter) { try { return fromFile(f, reporter); } catch (IOException e) { return noFontSpecifications; } } public static List<FontSpecification> fromFile(File f, Reporter reporter) throws IOException { InputStream is = null; try { is = new FileInputStream(f); List<FontSpecification> specifications = fromStream(is, f.getParentFile().getAbsolutePath()); reporter.logInfo(reporter.message("*KEY*", "Loaded font specification ''{0}''", f.getAbsolutePath())); return specifications; } catch (IOException e) { IOUtil.closeSafely(is); throw e; } } public static List<FontSpecification> fromStream(InputStream is, String sourceBase) throws IOException { try { SAXSource source = new SAXSource(new InputSource(is)); DOMResult result = new DOMResult(); TransformerFactory.newInstance().newTransformer().transform(source, result); Document d = (Document) result.getNode(); return FontSpecification.fromDocument(d, sourceBase); } catch (TransformerFactoryConfigurationError e) { return noFontSpecifications; } catch (TransformerException e) { return noFontSpecifications; } } }